package main

import "fmt"

func main() {
	var a int = 6
	fmt.Printf("a的地址是 %x \n", &a)

	//声明指针
	var ip *int     /*指向整型*/
	var fp *float64 /*指向浮点*/

	ip = &a
	fmt.Printf("ip的值是 %d", *ip)

	fmt.Println(fp)

	//空指针， 可以用nil来判断指针的地址是否有值
	var ip1 *int
	if ip1 == nil {
		fmt.Println("ip1指向地址数据为空")
	}

	*ip++
	fmt.Println(a)

	var arry1 = [3]int{9, 10, 11}
	modify(&arry1)
	fmt.Println("arry1=", arry1)

	modify1(&arry1)
	fmt.Println("arry1=", arry1)

	//虽然将指针传递给一个数组作为函数的参数并对其进行修改，但这并不是实现这一目标的惯用方法。我们有切片。
	modify2(arry1[:])
	fmt.Println(arry1)

}

func modify(arr *[3]int) {
	(*arr)[0] = 90
}

func modify1(arr *[3]int) {
	// 函数利用了 Go 语言对于指针数组访问元素时自动解引用的特性。
	arr[0] = 91
}

func modify2(arr []int) {
	arr[0] = 92
}
